package com.shujia.wyh.day01;


import com.mysql.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/*
    1.注册驱动（告诉Java程序，即将连接的是哪个品牌的数据库）
    2.获取连接（表示JVM的进程和数据库进程之间的通道打开了，这属于进程之间的通信，使用完后记得关闭通道）。
    3.获取数据库操作对象（专门执行sql语句的对象）
    4.执行SQL语句（DQL,DML…）
    5.处理查询结果集 （只有当第四步执行的是select语句的时候，才有本步）
    6.释放资源（使用完资源后一定要关闭资源，Java和数据库之间属于进程间的通信，开启之后一定要记得关闭）

    jdk提供了一个工具类给我们使用来进行注册驱动
    DriverManager: 构造方法私有化，成员方法为静态的
 */
public class JDBCTest1 {

    private static Statement stat;
    private static Connection conn;

    public static void main(String[] args) {
        //static void registerDriver(Driver driver)
        //注册与给定的驱动程序 DriverManager 。
        //1.注册驱动（告诉Java程序，即将连接的是哪个品牌的数据库）
        //jdk自己提供了一个工具类，其中有一个静态的成员方法registerDriver(Driver driver) ，用于注册驱动，告诉程序将来我们要连接哪个数据库
        //当你看到一个类作为方法的形参的时候，将来调用时，需要传入该类的实现对象
        //但是呢，我们观察后发现，这里需要的是一个接口类型，而我们之前说过
        //当看到接口作为方法的形参的时候，将来调用时需要传入该接口的具体实现类对象
        //由于我们现在要使用java操作mysql，于是乎我们就发现了mysqljava驱动包中有一个类已经实现了这个Driver接口
        //这个类在com.mysql.jdbc.Driver
        //创建驱动包的对象
        try {
//            Driver driver = new Driver();
            DriverManager.registerDriver(new Driver());
            //2.获取连接（表示JVM的进程和数据库进程之间的通道打开了，这属于进程之间的通信，使用完后记得关闭通道）。
            //jdk自身提供的DriverManager类中有一个方法getConnection(url,user,password)
            //可以获取与数据之间的连接，返回一个连接对象在java中
            //static Connection getConnection(String url, String user, String password)
            //尝试建立与给定数据库URL的连接。
            /**
             * url: 统一资源定位系统
             *  举例：http/htpps://www.baidu.com?name=''&age=''
             *  http/https 通过网络请求去访问网络上的资源
             *  jdbc:mysql 是驱动提供的请求头
             *  请求地址：指定mysql数据库所在的服务器的ip地址：192.168.254.110
             *  端口号：mysql默认的端口号3306
             *  指定需要操作的数据库：bigdata21
             *  请求的参数：useUnicode=true&characterEncoding=UTF8
             *
             *  完整的url: jdbc:mysql://192.168.254.110:3306/bigdata21?useUnicode=true&characterEncoding=UTF8
             *
             * user 用户名root
             * 密码password 密码123456
             *
             *
             */
            //mysql5.7之后是不建议直接通过代码访问数据库服务器
            String url = "jdbc:mysql://192.168.254.110:3306/bigdata21?useUnicode=true&characterEncoding=UTF8&useSSL=false";
            String user = "root";
            String password = "123456";
            //返回一个与数据库连接的对象
            conn = DriverManager.getConnection(url, user, password); //接口多态
            System.out.println("获取与数据库连接对象成功：" + conn);

            //3.获取数据库操作对象（专门执行sql语句的对象）
            //Connection接口中有一个方法可以获取与数据库的操作对象
            //Statement createStatement() throws SQLException;
            stat = conn.createStatement();
            System.out.println("获取与数据库操作对象成功："+stat);

            //Statment接口中有两个方法
            //ResultSet executeQuery(String sql)
            //执行给定的SQL语句，该语句返回单个 ResultSet对象。
            //4.执行SQL语句（DQL,DML…）
            //DQL 专门做查询的


            //DML 增删改
            //int executeUpdate(String sql)
            //执行给定的SQL语句，这可能是 INSERT ， UPDATE ，或 DELETE语句，或者不返回任何内容，如SQL DDL语句的SQL语句。
            int count = stat.executeUpdate("insert into dept(deptno,dname,loc) values(80,'腾讯','深圳')");
            //判断受影响的条数据来判断是否数据添加成功
            if(count==1){
                System.out.println("数据添加成功！！");
            }else {
                System.out.println("数据添加失败！！");
            }


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(stat!=null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
